package com.qqbot.impl.task;

import com.qqbot.core.core.Bot;
import com.qqbot.core.core.BotFactory;
import com.qqbot.core.message.MessageChain;
import com.qqbot.impl.service.SinaWeiBoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * 每日早晚安推送
 *
 * @author changwenpeng
 * @date 2022年5月10日
 */
@Slf4j
@Component
public class RobotTaskWater {

    @Value("${mybot.eightWaterTipGroups}")
    Long[] eightWaterTipGroups;

    @Autowired
    SinaWeiBoService sinaWeiBoService;

    /**
     * 每日八杯水：第一杯
     */
    @Scheduled(cron = "30 30 7 * * ?")
    public void waterOne() throws Exception {
        MessageChain mc = null;
        mc = sinaWeiBoService.getWaterImage();
        if (null == mc) {
            mc = new MessageChain();
        }
        mc.text("第一杯水：早上7点半\n"
                + "目的：清理肠胃\n"
                + "经过一晚的消耗，早上起床时身体正处于缺水状态，喝一杯温开水，有利于清理肠胃，这时也正是肾脏解毒的时间段，有利于排除身体毒素，促进身体恢复正常的新陈代谢");
        this.sendEightWaterTpis(mc);
    }

    /**
     * 每日八杯水：第二杯
     */
    @Scheduled(cron = "30 0 9 * * ?")
    public void waterTwo() throws Exception {
        MessageChain mc = null;
        mc = sinaWeiBoService.getWaterImage();
        if (null == mc) {
            mc = new MessageChain();
        }
        mc.text("第二杯水：上午9点\n"
                + "目的：提高活力\n"
                + "时刚开始一天的工作，喝一杯水有利于让人充满活力，提高工作效率。同时这时是肠胃排毒的时间段，可以帮助排除体内毒素。");
        this.sendEightWaterTpis(mc);
    }

    /**
     * 每日八杯水：第三杯
     */
    @Scheduled(cron = "30 30 11 * * ?")
    public void waterThree() throws Exception {
        MessageChain mc = null;
        mc = sinaWeiBoService.getWaterImage();
        if (null == mc) {
            mc = new MessageChain();
        }
        mc.text("第三杯水：中午11点半\n"
                + "目的：增加饱腹\n"
                + "经过一上午的工作，在午餐之前可以喝一杯水，从而增加饱腹感，避免吃中餐时因空腹进食太多，同时中午也是心脏排毒的时间，喝水可以促进身体新陈代谢和排毒。");
        this.sendEightWaterTpis(mc);
    }

    /**
     * 每日八杯水：第四杯
     */
    @Scheduled(cron = "30 30 13 * * ?")
    public void waterFour() throws Exception {
        MessageChain mc = null;
        mc = sinaWeiBoService.getWaterImage();
        if (null == mc) {
            mc = new MessageChain();
        }
        mc.text("第四杯水：下午1点半\n"
                + "目的：促进消化\n"
                + "这时大部分人都已经吃过中餐，注意吃中餐时不要吃的过饱，以免不利于消化而加重胃肠负担。饭后20分钟喝一杯水可以促进肠胃消化。");
        this.sendEightWaterTpis(mc);
    }

    /**
     * 每日八杯水：第五杯
     */
    @Scheduled(cron = "30 30 15 * * ?")
    public void waterFive() throws Exception {
        MessageChain mc = null;
        mc = sinaWeiBoService.getWaterImage();
        if (null == mc) {
            mc = new MessageChain();
        }
        mc.text("第五杯水：下午3点半\n"
                + "目的：振奋精神\n"
                + "下午3点办左右到了下午茶时间，喝杯水振奋精神，这时也是小肠排毒的时间段，刚好补充第五杯水。");
        this.sendEightWaterTpis(mc);
    }

    /**
     * 每日八杯水：第六杯
     */
    @Scheduled(cron = "30 30 17 * * ?")
    public void waterSix() throws Exception {
        MessageChain mc = null;
        mc = sinaWeiBoService.getWaterImage();
        if (null == mc) {
            mc = new MessageChain();
        }
        mc.text("第六杯水：下午5点半\n"
                + "目的：减轻疲劳饥饿\n"
                + "工作了一整天，身体比较疲惫劳累，下班前喝杯水可以减轻身体疲劳饥饿的状态。");
        this.sendEightWaterTpis(mc);
    }

    /**
     * 每日八杯水：第七杯
     */
    @Scheduled(cron = "30 0 19 * * ?")
    public void waterSeven() throws Exception {
        MessageChain mc = null;
        mc = sinaWeiBoService.getWaterImage();
        if (null == mc) {
            mc = new MessageChain();
        }
        mc.text("第七杯水：晚上7点\n"
                + "目的：促进血液循环和排毒\n"
                + "这时正是身体新陈代谢最旺盛的时间段，可以通过补充水分来促进血液循环和身体排毒。");
        this.sendEightWaterTpis(mc);
    }

    /**
     * 每日八杯水：第八杯
     */
    @Scheduled(cron = "30 0 22 * * ?")
    public void waterEight() throws Exception {
        MessageChain mc = null;
        mc = sinaWeiBoService.getWaterImage();
        if (null == mc) {
            mc = new MessageChain();
        }
        mc.text("第八杯水：晚上10点\n"
                + "目的：排毒素调节血液浓度\n"
                + "最后一杯水在入睡前两个小时之前补充，这杯水可以调节血液浓度，防止血液粘稠，补充睡眠时因出汗而失去的水分，同时这时是人体免疫系统的休息和排毒时间，可以帮助身体排除一天产生的毒素。\n"
                + "注意：这杯水不能喝的太晚或太多，睡前几分钟最好不要喝水，防止第二天早上出现水肿，同时睡前喝太多事，可能夜间会起床上厕所，影响睡眠质量。");
        this.sendEightWaterTpis(mc);
    }

    /**
     * 发送消息
     *
     * @param mc
     * @throws Exception
     */
    public void sendEightWaterTpis(MessageChain mc) {
        List<Bot> botList = BotFactory.getBots();
        if (CollectionUtils.isEmpty(botList)) {
            return;
        }
        Bot bot = botList.get(0);
        for (Long groupId : eightWaterTipGroups) {
            System.out.println(mc.toMessageString());
            bot.sendGroupMessage(groupId, mc);
        }
    }

}
